<?xml version='1.0' encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html lang="en" xml:lang="en" xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <link href="cpip.css" rel="stylesheet" type="text/css" />
    <title>File: /Users/paulross/dev/linux/linux-3.13/include/linux/prio_heap.h</title>
  </head>
  <body>
    <h1>File: /Users/paulross/dev/linux/linux-3.13/include/linux/prio_heap.h</h1>
    <p>Green shading in the line number column
means the source is part of the translation unit, red means it is conditionally excluded.
Highlighted line numbers link to the translation unit page. Highlighted macros link to
the macro page.</p>
    <pre><a name="1" /><span class="True">       1:</span> <span class="f">#</span><span class="n">ifndef</span> <a href="cpu.c_macros_noref.html#_X0xJTlVYX1BSSU9fSEVBUF9IXzA_"><span class="b">_LINUX_PRIO_HEAP_H</span></a>
<a name="2" /><span class="True">       2:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_X0xJTlVYX1BSSU9fSEVBUF9IXzA_"><span class="b">_LINUX_PRIO_HEAP_H</span></a>
<a name="3" /><span class="True">       3:</span> 
<a name="4" /><span class="True">       4:</span> <span class="k">/*</span>
<a name="5" /><span class="True">       5:</span> <span class="k"> * Simple insertion-only static-sized priority heap containing</span>
<a name="6" /><span class="True">       6:</span> <span class="k"> * pointers, based on CLR, chapter 7</span>
<a name="7" /><span class="True">       7:</span> <span class="k"> */</span>
<a name="8" /><span class="True">       8:</span> 
<a name="9" /><span class="True">       9:</span> <span class="f">#</span><span class="n">include</span> <span class="f">&lt;</span><span class="b">linux</span><span class="f">/</span><span class="b">gfp</span><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="10" /><span class="True">      10:</span> 
<a name="11" /><span class="True">      11:</span> <span class="k">/**</span>
<a name="12" /><span class="True">      12:</span> <span class="k"> * struct ptr_heap - simple static-sized priority heap</span>
<a name="13" /><span class="True">      13:</span> <span class="k"> * @ptrs - pointer to data area</span>
<a name="14" /><span class="True">      14:</span> <span class="k"> * @max - max number of elements that can be stored in @ptrs</span>
<a name="15" /><span class="True">      15:</span> <span class="k"> * @size - current number of valid elements in @ptrs (in the range 0..@size-1</span>
<a name="16" /><span class="True">      16:</span> <span class="k"> * @gt: comparison operator, which should implement &quot;greater than&quot;</span>
<a name="17" /><span class="True">      17:</span> <span class="k"> */</span>
<a name="18" /><span class="True">      18:</span> <span class="m">struct</span> <span class="b">ptr_heap</span> <span class="f">{</span>
<a name="19" /><span class="True">      19:</span>     <span class="m">void</span> <span class="f">*</span><span class="f">*</span><span class="b">ptrs</span><span class="f">;</span>
<a name="20" /><span class="True">      20:</span>     <span class="m">int</span> <a href="cpu.c_macros_ref.html#_bWF4XzA_"><span class="b">max</span></a><span class="f">;</span>
<a name="21" /><span class="True">      21:</span>     <span class="m">int</span> <span class="b">size</span><span class="f">;</span>
<a name="22" /><span class="True">      22:</span>     <span class="m">int</span> <span class="f">(</span><span class="f">*</span><span class="b">gt</span><span class="f">)</span><span class="f">(</span><span class="m">void</span> <span class="f">*</span><span class="f">,</span> <span class="m">void</span> <span class="f">*</span><span class="f">)</span><span class="f">;</span>
<a name="23" /><span class="True">      23:</span> <span class="f">}</span><span class="f">;</span>
<a name="24" /><span class="True">      24:</span> 
<a name="25" /><span class="True">      25:</span> <span class="k">/**</span>
<a name="26" /><span class="True">      26:</span> <span class="k"> * heap_init - initialize an empty heap with a given memory size</span>
<a name="27" /><span class="True">      27:</span> <span class="k"> * @heap: the heap structure to be initialized</span>
<a name="28" /><span class="True">      28:</span> <span class="k"> * @size: amount of memory to use in bytes</span>
<a name="29" /><span class="True">      29:</span> <span class="k"> * @gfp_mask: mask to pass to kmalloc()</span>
<a name="30" /><span class="True">      30:</span> <span class="k"> * @gt: comparison operator, which should implement &quot;greater than&quot;</span>
<a name="31" /><span class="True">      31:</span> <span class="k"> */</span>
<a name="32" /><span class="True">      32:</span> <span class="m">extern</span> <span class="m">int</span> <span class="b">heap_init</span><span class="f">(</span><span class="m">struct</span> <span class="b">ptr_heap</span> <span class="f">*</span><span class="b">heap</span><span class="f">,</span> <span class="b">size_t</span> <span class="b">size</span><span class="f">,</span> <span class="b">gfp_t</span> <span class="b">gfp_mask</span><span class="f">,</span>
<a name="33" /><span class="True">      33:</span>              <span class="m">int</span> <span class="f">(</span><span class="f">*</span><span class="b">gt</span><span class="f">)</span><span class="f">(</span><span class="m">void</span> <span class="f">*</span><span class="f">,</span> <span class="m">void</span> <span class="f">*</span><span class="f">)</span><span class="f">)</span><span class="f">;</span>
<a name="34" /><span class="True">      34:</span> 
<a name="35" /><span class="True">      35:</span> <span class="k">/**</span>
<a name="36" /><span class="True">      36:</span> <span class="k"> * heap_free - release a heap&apos;s storage</span>
<a name="37" /><span class="True">      37:</span> <span class="k"> * @heap: the heap structure whose data should be released</span>
<a name="38" /><span class="True">      38:</span> <span class="k"> */</span>
<a name="39" /><span class="True">      39:</span> <span class="m">void</span> <span class="b">heap_free</span><span class="f">(</span><span class="m">struct</span> <span class="b">ptr_heap</span> <span class="f">*</span><span class="b">heap</span><span class="f">)</span><span class="f">;</span>
<a name="40" /><span class="True">      40:</span> 
<a name="41" /><span class="True">      41:</span> <span class="k">/**</span>
<a name="42" /><span class="True">      42:</span> <span class="k"> * heap_insert - insert a value into the heap and return any overflowed value</span>
<a name="43" /><span class="True">      43:</span> <span class="k"> * @heap: the heap to be operated on</span>
<a name="44" /><span class="True">      44:</span> <span class="k"> * @p: the pointer to be inserted</span>
<a name="45" /><span class="True">      45:</span> <span class="k"> *</span>
<a name="46" /><span class="True">      46:</span> <span class="k"> * Attempts to insert the given value into the priority heap. If the</span>
<a name="47" /><span class="True">      47:</span> <span class="k"> * heap is full prior to the insertion, then the resulting heap will</span>
<a name="48" /><span class="True">      48:</span> <span class="k"> * consist of the smallest @max elements of the original heap and the</span>
<a name="49" /><span class="True">      49:</span> <span class="k"> * new element; the greatest element will be removed from the heap and</span>
<a name="50" /><span class="True">      50:</span> <span class="k"> * returned. Note that the returned element will be the new element</span>
<a name="51" /><span class="True">      51:</span> <span class="k"> * (i.e. no change to the heap) if the new element is greater than all</span>
<a name="52" /><span class="True">      52:</span> <span class="k"> * elements currently in the heap.</span>
<a name="53" /><span class="True">      53:</span> <span class="k"> */</span>
<a name="54" /><span class="True">      54:</span> <span class="m">extern</span> <span class="m">void</span> <span class="f">*</span><span class="b">heap_insert</span><span class="f">(</span><span class="m">struct</span> <span class="b">ptr_heap</span> <span class="f">*</span><span class="b">heap</span><span class="f">,</span> <span class="m">void</span> <span class="f">*</span><span class="b">p</span><span class="f">)</span><span class="f">;</span>
<a name="55" /><span class="True">      55:</span> 
<a name="56" /><span class="True">      56:</span> 
<a name="57" /><span class="True">      57:</span> 
<a name="58" /><span class="True">      58:</span> <span class="f">#</span><span class="n">endif</span> <span class="k">/* _LINUX_PRIO_HEAP_H */</span>
<a name="59" /><span class="True">      59:</span> </pre>
  </body>
</html>
